package com.briup.corejava.day06;

import java.util.Arrays;

/**
 * 二维数组的综合应用
 */
public class Test1 {

    // 使用二维数组来进行杨辉三角的输出
    public static void yhTriangle(int line){
        // 创建杨辉三角的二维数组
        int[][] yht = new int[line][];
        for(int i = 1;i<=yht.length;i++){
            int[] ints = new int[i];
            yht[i-1] = ints;
        }
        for(int i=0;i< yht.length;i++){
            for(int j=0;j<yht[i].length;j++){
                // 判断
                if(j == 0 || i == j){
                    yht[i][j] = 1;
                }else if(i>=2){
                    yht[i][j] = yht[i-1][j] + yht[i-1][j-1];
                }
            }
        }
        System.out.println(Arrays.deepToString(yht));
        // 遍历
        for(int i=0;i<yht.length;i++) {
            for (int j = 0; j < yht[i].length; j++){
                System.out.print(yht[i][j]+" ");
            }
            System.out.println();
        }
    }

    public static void getAvg(String s, int... a){
        int sum = 0;
        for(int i=0;i<a.length;i++){
            sum += a[i]; // a的本质是一个数组
        }
        System.out.println(s+": "+sum/a.length);
    }

    public static void main(String[] args) {
        // 二维数组的声明、初始化
        int[][] arr1 = new int[2][3];
        int[][] arr2 = new int[3][]; // {null,null,null}
        double[][] arr3 = new double[][]{{},{},{}};
        String[][] arr4 = {
                           {"tom","jerry"},
                           {"张三","李四","王武"}
                          };
        // 赋值、取值
        System.out.println(arr3[0]);
        System.out.println(Arrays.toString(arr3[0]));
        // arr3[0][0] = 100; // 数组下标越界
        // arr2[2][1] = 20; // 空指针
        System.out.println(arr1[1][1]);
        double[] d1 = new double[3];
        arr3[0] = d1;
        System.out.println(arr3[0]);
        System.out.println(Arrays.toString(arr3[0]));

        // 遍历 求和
        int sum = 0;
        for(int i=0;i< arr4.length;i++){
            for(int j=0;j<arr4[i].length;j++){
                // 取出每一个数
                System.out.println(arr4[i][j]);
            }
        }
        arr1[0][0] = 5;
        arr1[0][1] = 6;
        arr1[0][2] = 2;
        arr1[1][0] = 7;
        arr1[1][1] = 4;
        arr1[1][2] = 8;
        for (int[] ints : arr1) {
            for (int j = 0; j < ints.length; j++) {
                sum += ints[j];
            }
        }
        System.out.println(sum);

        // 杨辉三角调用
        yhTriangle(5);

        // 可变长参数的调用
        getAvg("s1",10,20,30);
        // getAvg("s2"); // 因为没有传参，数组长度为0，算数异常，除数为0
        getAvg("s3",10);

        int[][][] a = new int[2][3][4];
        int[][][][] b = new int[1][][][];

        // 对象的创建和使用
        Hero h1 = new Hero();
        h1.name = "神里绫华";
        Hero h2 = new Hero();
        h2.name = "墨菲特";
        h2.q();
        h2.r();
    }
}
// 游戏角色的设计
class Hero{
    // 属性 -> 通过定义变量的形式来描述静态特征
    String name;
    int hp;
    int atk;
    String[] position;
    // 行为 -> 通过定义【成员方法】来描述动态的特征
    // 成员方法前面不使用static修饰
    public void q(){
        System.out.println("定点控制，控制状态下，敌方扣血自身回血");
    }
    public void w(){
        System.out.println("位移，碰触单位之后可以位移三段");
    }
    public void e(){
        System.out.println("护盾，护盾爆炸有嘲讽功能");
    }
    public void r(){
        System.out.println("瞬时不可选中，落地范围伤害，带吸附");
    }
}
